package com.lekang.le.service.impl;

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.lekang.le.mapper.FloorMapper;
import com.lekang.le.domain.Floor;
import com.lekang.le.service.IFloorService;

/**
 * 楼层信息Service业务层处理
 * 
 * @author szh
 * @date 2025-10-14
 */
@Service
public class FloorServiceImpl implements IFloorService 
{
    @Autowired
    private FloorMapper floorMapper;

    /**
     * 查询楼层信息
     * 
     * @param id 楼层信息主键
     * @return 楼层信息
     */
    @Override
    public Floor selectFloorById(Long id)
    {
        return floorMapper.selectFloorById(id);
    }

    /**
     * 查询楼层信息列表
     * 
     * @param floor 楼层信息
     * @return 楼层信息
     */
    @Override
    public List<Floor> selectFloorList(Floor floor)
    {
        return floorMapper.selectFloorList(floor);
    }

    /**
     * 新增楼层信息
     * 
     * @param floor 楼层信息
     * @return 结果
     */
    @Override
    public int insertFloor(Floor floor)
    {
        // 直接在新增方法内实现名称重复验证
        // 1. 查询是否存在同名且未删除的楼层（使用已有的查询方法）
        Floor queryParam = new Floor();
        queryParam.setFloorName(floor.getFloorName());
        queryParam.setIsDeleted(0L); // 排除已删除的记录
        List<Floor> existingFloors = floorMapper.selectFloorList(queryParam);

        // 2. 验证逻辑：如果存在同名楼层，抛出异常
        if (existingFloors != null && !existingFloors.isEmpty()) {
            throw new RuntimeException("楼层名称已存在，请更换其他名称");
        }

        // 3. 验证通过，执行新增操作
        return floorMapper.insertFloor(floor);
    }

    /**
     * 修改楼层信息
     * 
     * @param floor 楼层信息
     * @return 结果
     */
    @Override
    public int updateFloor(Floor floor)
    {
        return floorMapper.updateFloor(floor);
    }

    /**
     * 批量删除楼层信息
     * 
     * @param ids 需要删除的楼层信息主键
     * @return 结果
     */
    @Override
    public int deleteFloorByIds(Long[] ids)
    {
        return floorMapper.deleteFloorByIds(ids);
    }

    /**
     * 删除楼层信息信息
     * 
     * @param id 楼层信息主键
     * @return 结果
     */
    @Override
    public int deleteFloorById(Long id)
    {
        return floorMapper.deleteFloorById(id);
    }
    @Override
    public List<Floor> selectFloorWithAllRelations() {
        // 直接调用Mapper的级联查询方法
        return floorMapper.selectFloorWithAllRelations();
    }

    @Override
    public Floor selectFloorWithAllRelationsById(Long id) {
        // 校验ID非空（可选，根据业务需求添加）
        if (id == null || id <= 0) {
            throw new IllegalArgumentException("楼层ID不能为空且必须为正数");
        }
        // 调用Mapper查询单条全链路数据
        return floorMapper.selectFloorWithAllRelationsById(id);
    }

}
